/*
自己选择的路 ,跪着也要走完。朋友们 , 虽然这个世界日益浮躁起来,只
要能够为了当时纯粹的梦想和感动坚持努力下去 , 不管其它人怎么样,我
们也能够保持自己的本色走下去。
To the world , you will be a person , but to a person , you
will be the world .                               ——AKPower
*/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <string>
#include <stack>
#include <set>
#define IOS ios::sync_with_stdio(false), cin.tie(0)
using namespace std;
typedef long long ll;
const ll maxn = 3e5;
ll n, m, w;
ll c[maxn];
ll a[maxn];

bool judge(ll x)
{
    ll cnt = 0;
    ll pre = 0;
    for (ll i = 1; i <= n; i++)
    {
        pre += c[i];
        ll t = a[i] + pre;
        if (t >= x)
            continue;
        cnt += (x - t);
        if (cnt > m)
            return false;
        // c[i] += (x - t);
        pre += (x - t);
        c[i + w] -= (x - t);
    }
    // for (ll i = n - w; i <= n; i++)
    // {
    //     pre += c[i];
    //     if (a[i] + pre < x)
    //         return false;
    // }
    return true;
}

int main()
{
    IOS;
    cin >> n >> m >> w;
    ll l = 1e9 + 10;
    for (ll i = 1; i <= n; i++)
    {
        cin >> a[i];
        l = min(l, a[i]);
        // r=max(a[i],r);
    }
    ll r = l + m + 10;
    ll mid;
    ll ans = 0;
    while (l <= r)
    {
        memset(c, 0, sizeof(c));
        mid = (l + r) >> 1;
        if (judge(mid))
        {
            l = mid + 1;
            ans = max(ans, mid);
        }
        else
            r = mid - 1;
    }
    cout << ans << endl;
    getchar();
    getchar();
    return 0;
}
